//定义一个模块
module Test(
			input ext_clk_25m, // 外部时钟
			input ext_rst_n, //复位信号，低电平有效
			input[3:0] key, //Key控制开关
			output reg[7:0] led //蜂鸣器控制，1--响，0--不响
	);

//-------------------------------------------
reg[40:0] cnt;//20位计数器

reg clk_div;
wire[3:0] key_index;

assign key_index = key[2] * 3'b100 + key[1] * 3'b010 + key[0] * 3'b001;

//-----计时器----
always @(posedge ext_clk_25m or negedge ext_rst_n)
	if(!ext_rst_n) cnt <= 20'd0; //复位
	else if(cnt < 30'd12_500_000)
		begin 
			cnt <= cnt + 1'b1; 
			clk_div <= 0;
		end
	else if(cnt < 30'd25_000_000)
		begin 
			cnt <= 20'd0; clk_div <= 1;
		end
	else if(cnt == 30'd25_000_000)
		cnt <=0;
	
//产生占空比为50%的蜂鸣器信号，对于always这种时序电路，驱动信号应该是有上升沿或者下降沿的信号
always @(posedge clk_div or negedge ext_rst_n )
	//值得注意的是，最外层if语句中包含的应该是敏感信号，如果不是，则会报错
	//而且，值得注意的是，完全可以不用管ext_clk_25m现在是什么值，只需要知道这是一个上升沿就可以了
	if(!ext_rst_n) 
		begin 
			led <= 8'b11111111;
		end
	else 
		begin 
			//key_index = key[2] * 3'b100 + key[1] * 3'b010 + key[0] * 3'b001;
			
			if(key[3])
				begin
					led = 8'b11111111;
					led[key_index] = 1'b0;
				end
			else
				led <= 8'b11111111;
		end
		
		
endmodule
